草庐IT

Java ASN.1 编译器

全部标签

c# - 取决于编译器版本的条件编译

我正在寻找一种方法来实现这样的东西:#ifCSHARP_COMPILER_IS_FOR_CSHARP_6_OR_HIGHERfoo?.Bar();#elseif(foo!=null){foo.Bar();}#endif当然,我可以自己定义一个条件编译符号,但它不合适。有没有内置常量?我发现的问题相当陈旧。也许,东西都变好了? 最佳答案 没有,据我所知他们没有改变任何东西:-)您也许可以在csproj中做一些魔术来定义常量……但它很复杂……没有直接指定CSC版本的属性...有一个属性($(LangVersion))指定所需语言标准的版

c# - 成员访问调用不编译但静态调用编译

所以今天我在尝试构建我们公司的解决方案时遇到了一个有趣的问题,我想问问你们,你们知道为什么会这样吗?我被告知它可能来self的机器/VisualStudio,因为其他人没有同样的问题。所以我们在项目A中有一个方法:privatestaticstringRpcRoutingKeyNamingConvention(TypemessageType,ITypeNameSerializertypeNameSerializer){stringqueueName=typeNameSerializer.Serialize(messageType);returnmessageType.GetAttrib

c# - 使用 T4 和 C# 在运行时编译动态代码

我在T4上阅读的使用TextTemplatingFilePreprocessor的文章展示了如何动态生成成为项目一部分并与项目一起编译的代码。是否可以使用T4生成在运行时编译、输出到dll、加载和执行的代码,并且所述代码可以访问与dll关联的常见可见性功能?如果是这样,请给我举个例子。我正在有效地尝试做与使用IL生成动态dll相同的事情,而不是使用C#。编辑我需要这个的具体情况很简单。我正在编写一个将消息路由到服务的消息路由器。服务可以是本地的或远程的。声明性脚本被编译成C#。动态部分是“这个服务是本地的还是远程的?”。输出C#相应更改。本地/远程的路由风格不同,因此具有动态特性。这是

c# - C# 语言编译器是否自行执行任何实际优化?

根据随机的Internet评论,我一直认为C#编译器对IL(删除始终为真的if语句、简单的内联等)进行了简单的优化,然后是JIT执行真正的、复杂的优化。举个例子,在thedocumentationforthe/optimizecompilerflag上,它说The/optimizeoptionenablesordisablesoptimizationsperformedbythecompilertomakeyouroutputfilesmaller,faster,andmoreefficient.这意味着语言编译器至少应用了一些优化。然而,玩弄TryRoslyn,这似乎不是真的。看起来

c# - 空传播运算符、out 参数和错误的编译器错误?

假设我有一个类,其属性类型为Dictionary,那可能是空的。这会编译但调用TryGetValue()可以抛出NullRef运行时异常:MyClassc=...;stringval;if(c.PossiblyNullDictionary.TryGetValue("someKey",outval)){Console.WriteLine(val);}所以我添加了一个null传播运算符来防止null,但这不会编译:MyClassc=...;stringval;if(c.PossiblyNullDictionary?.TryGetValue("someKey",outval)??false)

c# - 是否可以在没有 MSBuild 的情况下编译 C# 项目?

我正在开发一个发布(构建和创建输出)C#项目并执行其他工作的部署应用程序。MSBuild并不方便。所以,我考虑创建自己的构建引擎。我知道可以使用C#编译器将简单的sample.cs文件编译成dll文件。但是我可以完全不使用MSBuild来编译项目吗? 最佳答案 是的,您可以一直使用csc(C#编译器)来编译您的源代码。问题是您必须自己一切。由于MSBuild可以解释sln和csproj文件,并且了解要采取的各种操作、要使用的引用以及在哪里可以找到它们,因此更容易使用比csc。例如:有一些特定于Office加载项的任务。MSBuild

c# - 如果声明是接口(interface),编译器无法识别泛型中的属性

查看以下演示我的VisualStudio2017编译器问题的内容publicinterfaceIFoo{stringKey{get;set;}}publicclassFoo:IFoo{publicstringKey{get;set;}}classProgram{staticvoidMain(string[]args){PrintFoo(newFoo(){Key="HelloWorld"});Console.ReadLine();}privatestaticvoidPrintFoo(Tfoo)whereT:IFoo{//setbreakpointhereandtrytolookatfoo

C# REPL 工具;类似控制台的快速编译工具

我经常启动一个新的VisualStudio实例,只是为了创建一个具有一些输出和/或输入的控制台应用程序。这是我用来测试方法或其他东西的临时沙箱,几分钟后关闭。您能想到任何工具来替代它吗?我曾经有一个应用程序有两个文本字段:一个在顶部用于获取C#代码,另一个在底部用作标准输出。但是我记不起名字了。 最佳答案 看看LINQPad.它重量轻,功能丰富。非常适合短片段。SnippetCompiler是另一个不错的。在LINQPad之前,它曾经是我的主要选择。它的作者最近似乎没有积极更新它。这些是我在此处列出的建议中的两个主要建议:Areth

为 32/64 位或任何 cpu 益智游戏编译的 C#

这个问题与之前关于SO的问题有关AnyCPUquestion1和AnyCPUQuestion2我有一个最初使用VisualStudio2005在WinXP上构建的应用程序(别笑!)。此应用调用我们的win32C++dll。调用C++dll的C#组件是使用“任何CPU”配置构建的,并且可以在WinXP上愉快地工作,没有任何问题。我们现在正在迁移到Win7,并且我们应用程序的发布版本(基于WinXP和VC2005构建)运行良好。然而,随着向我们的用户推出win7,我们现在有机会迁移到VS2010,并且我已经使用VC2010在win7上构建了C#组件,但是现在运行这个版本时,我得到很多“无法

c# - lambda 表达式中的事件 - C# 编译器错误?

我正在考虑使用lamba表达式来允许以强类型方式连接事件,但中间有一个监听器,例如给定以下类(class)classProducer{publiceventEventHandlerMyEvent;}classConsumer{publicvoidMyHandler(objectsender,EventArgse){/*...*/}}classListener{publicstaticvoidWireUp(Expression>expr){/*...*/}}事件将被连接为:Listener.WireUp((p,c)=>p.MyEvent+=c.MyHandler);但是这会导致编译器错误